package com.xxxt.dao;

import java.util.List;

import org.apache.ibatis.annotations.Param;

import com.xxxt.entity.Student;
/**
 * 学生Dao层接口
 * @author huangrusiehng
 *
 */
public interface StudentMapper {
	/**
	 * @describe 增加单个学生
	 * @param student 学生实体类
	 */
	public void addStudent(Student student);
	
	/**
	 * @describe 根据学号删除单个学生
	 * @param sno 学生学号
	 */
	public void deleteStudent(String sno);
	
	/**
	 * @describe 根据Sno查一个学生
	 * @param sno 学生学号
	 * @return 单个学生实体类
	 */
	public Student queryOneStudentBySno(String sno);
	
	/**
	 * @describe 修改单个学生
	 * @param student 学生实体类
	 */
    public void updateStudentBySno(@Param("student") Student student);
    
    public void updateStudentCompanyBySno(@Param("student") Student student);
   
    /**
     * @describe 判断学生是否存在 
     * @param sno 学生学号
     * @return 存在:学生 不存在:null
     */
    public Student studentIsExist(String sno);
   
    /**
     * @describe 查询所有的学生
     * @return 所有学生的list集合
     */
    public List<Student> queryAllStudents();
    
    /**
     * @describe 根据班级id查询该班级的所有学生
     * @param classGradeId 班级的id
     * @return 一个班级所有学生集合
     */
    public List<Student> queryOneClassGradeAllStudents(String classGradeId);
    
    /**
     * @describe 根据学生List集合批量导入学生（select * ）
     * @param 要导入的学生集合
     */
    public void batchAddStudent(List<Student> students);
    
    /**
     * @describe 根据sno查询出学生所在专业、班级、教师、学校信息
     * @param sno 学生学号
     * @return 学生实体类
     */
    public Student queryOneStudentSchoolInfoBySno(String sno);
    
    /**
     * @describe 根据学号数组批量删除对应学生
     * @param SnoArray 学生学号字符串对象
     */
    public void batchDeleteStudent(List<String> snoArray);
    
    /**
     * @describe 根据学生名字模糊查询学生
     * @param name 需要查询的学生姓名
     * @return 学生对象集合（包括班级、年级、专业、学院、学校信息）
     */
    public List<Student> queryManyStudentByNameLike(String name) ;
    
    /**
     * @describe 根据classGradeId查询这个班级的所有学生（定制）
     * @param classGradeId 班级id
     * @return 学生集合（包括班级、年级、专业、学院、学校信息）
     */
    public List<Student> queryStudentByClassGrade(String classGradeId) ;
    
    /**
     * @describe 根据gradeId查询这个班级的所有学生（定制）
     * @param gradeId 年级Id
     * @return 学生集合（包括班级、年级、专业、学院、学校信息）
     */
    public List<Student> queryStudentByGrade(String gradeId) ;
    /**
     * @describe 根据gradeId查询这个班级的所有学生（定制）
     * @param specialtyId 专业Id
     * @return 学生集合（包括班级、年级、专业、学院、学校信息）
     */
    public List<Student> queryStudentBySpecialty(String specialtyId) ;
    
    /**
     * @describe 根据学院查询这个学院的所有学生（定制）
     * @param collegeId 学院Id
     * @return 学生集合（包括班级、年级、专业、学院、学校信息）
     */
    public List<Student> queryStudentByCollege(String collegeId);
    
    /**
     * @describe 根据学校查询这个学校的所有学生（定制）
     * @param schoolId 学校Id
     * @return 学生集合（包括班级、年级、专业、学院、学校信息）
     */
    public List<Student> queryStudentBySchool(String schoolId);
    
   /**
         * 获取所有学生的学号列表
    * @return
    */
    public List<String> getAllStudentSno();
    
    /**
           * 根据姓名和班级查询学生
     * @param name 学生姓名
     * @param classGradeId 学生班级号
     * @return
     */
    public List<Student> queryStudentByNameAndClassGrade(@Param("name")String name,@Param("classGradeId") String classGradeId);
    
    /**
           * 根据姓名和年级查询学生
     * @param name 学生姓名
     * @param gradeId 年级id
     * @return
     */
    public List<Student> queryStudentByNameAndGrade(@Param("name")String name,@Param("gradeId") String gradeId);
    /**
           * 根据姓名和专业查询学生
     * @param name 学生姓名
     * @param specialtyId 专业id
     * @return
     */
    public List<Student> queryStudentByNameAndSpecialty(@Param("name")String name,@Param("specialtyId") String specialtyId);
    /**
           *  根据姓名和学院查询学生
     * @param name 学生姓名
     * @param collegeId 学院id
     * @return
     */
    public List<Student> queryStudentByNameAndCollege(@Param("name")String name,@Param("collegeId") String collegeId);
    /**
           *  根据姓名和学校查询学生
     * @param name 学生姓名
     * @param schoolId 学校id
     * @return 
     */
    public List<Student> queryStudentByNameAndSchool(@Param("name")String name,@Param("schoolId") String schoolId);
    
    /**
           * 根据公司id查询该公司的所有学生
     * @param companyId
     * @return
     */
    public List<Student> queryStudentByCompany(String companyId);
    /**
     * 
     * @param tno 教师编号
     * @return 学生集合
     */
    public List<Student> queryStudentWithInternship(String tno);
    /**
     * 
     * @param tno 教师编号
     * @return
     */
    public List<Student> queryStudentWithNoInternship(String tno);
    
    /**
     * 
     * @param tno 教师编号
     * @return
     */
    public List<Student> queryAllStudentsSchoolInfo(String tno);
}
